\chapter{密钥管理}
密钥管理是一个很大的话题，其涉及到\footnote{对这些密钥管理内容的简单解释，可以参考\url{https://baike.baidu.com/item/密钥管理},百度的这个词条由“科普中国”科学百科词条编写与应用工作项目审核 。}：
\begin{enumerate}
	\item 密钥生成 
	\item 密钥分发 
	\item 验证密钥 
	\item 更新密钥 
	\item 密钥存储 
	\item 备份密钥 
	\item 密钥有效期 
	\item 销毁密钥 
\end{enumerate}
\par

图\ref{key-management}是来自于简书上一个帖子里的一张图，内容比上面多了一项“密钥使用”其他都一样，只不过叫法略有不同，大家参考对比来学习。
\begin{figure}[htbp]
	\centering
	\includegraphics[width=0.7\textwidth]{keymgm.png}
	\caption{密钥管理的主要内容\footnote{本图来自\url{https://www.jianshu.com/p/46a911bd49a7}}}
	\label{key-management}
\end{figure}
\par

因为密钥的安全在现在的密码体制安全中是决定性的，所以美国的NIST也就密钥管理，发布了一些标准，比如SP 800-57 Recommendation for Key Management: Part 1 – General，Part 2 – Best Practices for Key Management Organizations，Part 3: Application-Specific Key Management Guidance等，在SP 800-57 Part1中，其从几个侧面讨论了密钥管理，可以从NIST SP 800-57 Part 1的目录上看到，如图所示。


\section{密钥分发(key distribution)的基本方法}
加密算法中密钥非常关键，而密钥或者生成密钥的相关信息是需要在通信双方或多方之间传递的，那么如何安全地对密钥或者密钥相关信息进行相互之间的传递就是一个重要的问题，这也是密钥分发研究的问题。

\subsection{有中心的密码分发}
我们假定有个一个密钥分配中心KDC(key distribution center)与所有的通信方之间都有一个主密钥(可以说建立了一个可信信道)，比如A和KDC之间的主密钥为$K_A$，B和KDC之间的主密钥为$K_B$，C和KDC之间的主密钥为$K_C$等等。A如果想和B建立一个会话密钥的过程为：
\begin{enumerate}
	\item A向KDC发送请求和B建立会话密钥的请求消息R和一个随机数$N_1$.
	\item KDC将会话密钥$K_S$，应答消息，$N_1$，$E_{K_B}(K_S,ID_A)$一起用$K_A$加密，发送给A，其中$ID_A$是A的身份信息。
	\item A用$K_A$解密后，比较$N_1$确定是本次请求，然后将$E_{K_B}(K_S,ID_A)$发送给B。
	\item B收到后用$K_B$解密，然后生成一个新随机数$N_2$，将$E_{K_S}(N_2)$发送给A。
	\item A用$K_S$解密后，将$E_{K_S}(f(N_2))$发送给B，A和B的会话密钥A方已经确认。
	\item B用$K_S$解密后，验证$f(N_2))$，正确，则A和B的会话密钥B方已经确认。
\end{enumerate}
\subsection{无中心的密钥分发}
无中心的密钥分发要求双方已经共享了一个主密钥(main key)MK，再次基础上，双方协商一个新的通信密钥，协商过程如下：
\begin{enumerate}
	\item A向B发送请求密钥消息R和一个随机数$N_1$.
	\item B选取会话密钥$SK$,将其和B的身份、$f(N_1)$、新随机数$N_2$用$MK$加密后一起发给A。
	\item A收到后，用$MK$解密，验证$f(N_1)$，证明是此次的协商。A将$SK$和$f(N_2)$用$MK$加密后发给B。A与B的新会话开始使用$SK$。
	\item B收到后，用$MK$解密，验证$f(N_2)$，B与A的新会话开始使用$SK$,
\end{enumerate}

\section{Diffie-Hellman密钥交换}
大素数p和p的原根a公开，在这一基础上通信双方就可以协商会话密钥，过程如下：
\begin{enumerate}
	\item A选择一个保密随机数$X_A$，将$\alpha=a^{X_A}\ mod\ p$发给B。
	\item B选择一个保密随机数$X_B$，将$\beta=a^{X_B}\ mod\ p$发给A。
	\item A,B可分别计算密钥，A的计算过程为，$\beta ^{X_A}=a^{X_B X_A}\ (mod\ p)$,B的计算过程为，$\alpha ^{X_B}=a^{X_A X_B}\ (mod\ p)$。
\end{enumerate}

\section{密钥分割}
在有些应用场合，为了保证密钥的安全，需要密钥(或者秘密)由多人持有，任何一个人持有的信息不能得到完整的密钥，只有全部或达到规定的人数时，将这些人持有的信息合并，才可以获得(或者计算)完整的密钥。
\subsection{Shamir门限方案}
Shamir门限方案时基于多项式的拉格朗日(Lagrange)插值公式的。
\begin{note}
	Shamir这个名字是不是很熟悉？他就是RSA中的S，Shamir.图灵将获得者Shamir,Shamir门限方案也是其获得图灵奖时提到的主要贡献\footnote{关于Shamir的简单介绍，可以看ACM关于图灵机获得者的介绍页面\url{https://amturing.acm.org/award_winners/shamir_2327856.cfm}}。
\end{note}

\subsection{CRT门限方案}
CRT(chinese remainder theorem)门限方案，顾名思义，时利用中国剩余定理构造的门限方案。